<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
		
			/*
			 * 简要说明
			 * 创建一个构造函数，专门用来创建Person对象的
			 * 	构造函数就是一个普通的函数，创建方式和普通函数没有区别,
			 * 	不同的是构造函数习惯上首字母大写
			 * 
			 * 构造函数和普通函数的区别：
			 * 调用方式的不同，普通函数是不加new直接调用，而构造函数需要使用new关键字来调用
			 * 
			 * 构造函数的执行流程：
			 * 	1.浏览器：立刻创建一个新的对象
			 * 	2.浏览器：将新建的对象设置为函数中this,在构造函数中可以使用this来引用新建的对象
			 * 	3.开发者：逐行执行函数中的代码
			 * 	4.浏览器：将新建的对象作为返回值返回
			 * 
			 * 实践案例：
			 * 使用同一个构造函数创建的对象，称为一类对象，也将一个构造函数称为一个类。
			 * 	将通过一个构造函数创建的对象，称为是该类的实例，例如：per是Person类的实例。
			 * 
			 * 重点this的情况：
			 * 	1.当以函数的形式调用时，this是window
			 * 	2.当以方法的形式调用时，谁调用方法this就是谁
			 * 	3.当以构造函数的形式调用时，this就是新创建的那个对象
			 * 
			 */

			/**
			 * Person类
			 * @param name
			 * @param age
			 * @param gender
			 * @constructor
			 */
			function Person(name , age , gender){
				//this引用新建对象per
				this.name = name;
				this.age = age;
				this.gender = gender;
				this.sayName = function(){
					alert(this.name);
				};
			}
			
			function Dog(){
			}

			//以构造函数的形式调用，per是Person类的实例
			var per = new Person("孙悟空",18,"男");
			var per2 = new Person("玉兔精",16,"女");
			var per3 = new Person("奔波霸",38,"男");

			//以构造函数的形式调用
			var dog = new Dog();

			console.log(per);
			console.log(dog);
			
			/*
			 * 使用instanceof可以检查一个对象是否是一个类的实例
			 * 语法：
			 * 		对象 instanceof 构造函数
			 * 如果是，则返回true，否则返回false
			 */
			console.log(per instanceof Person);
			console.log(dog instanceof Person);
			
			/*
			 * 所有的对象都是Object的后代，所以任何对象和Object左instanceof检查时都会返回true
			 */
			console.log(dog instanceof Object);
			
			
		</script>
	</head>
	<body>
	</body>
</html>
